home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_03_06 / 3n06025a < prev    next >
Text File  |  1992-04-14  |  2KB  |  81 lines

  1. /******************************************************************
  2.  Inter.c    Intercepting dll functions demonstration.
  3.         (c) Timothy Adams  1992
  4.  Windows    SDK V. 3.0 and 3.1
  5.  Microsoft  C    V. v6.0
  6.  Windows    V. 3.0 and 3.1
  7.  
  8. ******************************************************************/
  9. #define _WINDOWS
  10. #include <windows.h>
  11.  
  12. VOID FAR PASCAL Patch(HWND hWndList);
  13. VOID FAR PASCAL UnPatch(VOID);
  14. int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
  15. BOOL FAR PASCAL InterDlgProc(HWND hDlg,WORD message,WORD wParam,LONG lParam);
  16.  
  17. /*Intercept Dlg Box Defines*/
  18. #define IDD_INTER      100
  19. #define IDL_INTER      101
  20.  
  21. HANDLE    hInst;
  22. HWND    hWndInter;
  23.  
  24. int PASCAL WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
  25. HANDLE     hInstance;
  26. HANDLE     hPrevInstance;
  27. LPSTR     lpCmdLine;
  28. int     nCmdShow;
  29. {
  30.  FARPROC  lpfnInter;
  31.  MSG  msg;
  32.  
  33.  hInst=hInstance;
  34.  if (hPrevInstance)
  35.      return 0;
  36.  lpfnInter=MakeProcInstance(InterDlgProc,hInst);   /*Open the Dialog Box*/
  37.  hWndInter=CreateDialog(hInst,MAKEINTRESOURCE(IDD_INTER),NULL,lpfnInter);
  38.  
  39.  Patch(GetDlgItem(hWndInter,IDL_INTER));    /*Patch WinExec Function*/
  40.  while (GetMessage(&msg,NULL,NULL, NULL))
  41.       {
  42.       if (IsDialogMessage(hWndInter,&msg))
  43.       continue;
  44.       TranslateMessage(&msg);
  45.       DispatchMessage(&msg);
  46.       }
  47.  FreeProcInstance(lpfnInter);
  48.  UnPatch();         /*UnPatch WinExec Function*/
  49.  return (msg.wParam);
  50. }
  51.  
  52.  
  53. BOOL FAR PASCAL InterDlgProc(HWND hDlg,WORD message,WORD wParam,LONG lParam)
  54. {
  55.  int nWidth,nHeight;
  56.  RECT rc;
  57.  
  58.  switch (message)
  59.      {
  60.      case WM_INITDIALOG:
  61.      /*Center Window*/
  62.      nWidth=GetSystemMetrics(SM_CXSCREEN);
  63.      nHeight=GetSystemMetrics(SM_CYSCREEN);
  64.      GetClientRect(hDlg,&rc);
  65.      SetWindowPos (hDlg,NULL,
  66.                nWidth/2-rc.right/2,
  67.                nHeight/2-rc.bottom/2,
  68.                0,0,SWP_NOSIZE);
  69.      return TRUE;
  70.      case WM_COMMAND:
  71.      switch (wParam)
  72.          {
  73.          case IDCANCEL:
  74.          DestroyWindow(hDlg);
  75.          PostQuitMessage(0);
  76.          return TRUE;
  77.          }
  78.     }
  79.   return FALSE;
  80. }
  81.